package observer;

/**
 * This interface is required to work around the horrible failure of {@link Cloneable} at enabling
 * cloning.  Object.clone() does not have public access, and since Cloneable does not require
 * overriding the clone() method, one can't clone anything without first typecasting it to something
 * that overrides clone().
 *
 * As an example of this class, one could define a copiable class with:<br>
 * <code>public class SomeClass implements observer.Copiable&lt;SomeClass&gt; {<br>
 * &nbsp;&nbsp;&nbsp;&nbsp;...<br>
 * &nbsp;&nbsp;&nbsp;&nbsp;SomeClass copy() {<br>
 * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br>
 * &nbsp;&nbsp;&nbsp;&nbsp;}<br>
 * &nbsp;&nbsp;&nbsp;&nbsp;...<br>
 * }<code>
 *
 * @author Neil Dickson
 */
public interface Copiable<E> {
	E copy();
}
